CLASIFICACIÓN DE ENFERMEDADES DE CACAO

Author

Diego Guanotasig - Jorge Delgado

Published

December 9, 2025

TRABAJO FINAL

Librerias

Code
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import EfficientNetB0, MobileNetV2
from tensorflow.keras import layers, models
import matplotlib.pyplot as plt
import numpy as np
import os
Code
BASE_DIR = "G:/Mi unidad/Colab Notebooks/AProfundo/clasificacion_dataset/"
IMG_SIZE = (224, 224)
BATCH = 32
Code
train_gen = ImageDataGenerator(rescale=1/255)
val_gen   = ImageDataGenerator(rescale=1/255)

train_ds = train_gen.flow_from_directory(
    BASE_DIR+"train",
    target_size=IMG_SIZE,
    batch_size=BATCH,
    class_mode="categorical"
)

val_ds = val_gen.flow_from_directory(
    BASE_DIR+"val",
    target_size=IMG_SIZE,
    batch_size=BATCH,
    class_mode="categorical"
)

num_classes = len(train_ds.class_indices)
Found 234 images belonging to 3 classes.
Found 47 images belonging to 3 classes.
Code
import matplotlib.pyplot as plt

# Mostrar 5 imágenes del dataset de entrenamiento
def mostrar_5_iniciales(dataset):
    images, labels = next(dataset)  # primer batch
    plt.figure(figsize=(12, 8))

    for i in range(5):
        plt.subplot(1, 5, i+1)
        plt.imshow(images[i])
        plt.axis("off")

    plt.suptitle("Primeras 5 imágenes del dataset (train)")
    plt.show()

mostrar_5_iniciales(train_ds)

Code
import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))
[]

EfficientNetB0

Code
efficient_model = EfficientNetB0(
include_top=False,
input_shape=IMG_SIZE+(3,),
weights="imagenet"
)

efficient_model.trainable = False

model_e = models.Sequential([
efficient_model,
layers.GlobalAveragePooling2D(),
layers.Dense(256, activation="relu"),
layers.Dense(num_classes, activation="softmax")
])

model_e.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"]
)

history_e = model_e.fit(train_ds, validation_data=val_ds, epochs=10)
Epoch 1/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 3:06 27s/step - accuracy: 0.3000 - loss: 1.2017

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:05 21s/step - accuracy: 0.2929 - loss: 1.3299

3/8 ━━━━━━━━━━━━━━━━━━━━ 2:02 25s/step - accuracy: 0.3033 - loss: 1.3465

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:32 23s/step - accuracy: 0.3006 - loss: 1.3439

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:11 24s/step - accuracy: 0.2985 - loss: 1.3358

6/8 ━━━━━━━━━━━━━━━━━━━━ 50s 25s/step - accuracy: 0.2938 - loss: 1.3273 

7/8 ━━━━━━━━━━━━━━━━━━━━ 26s 26s/step - accuracy: 0.2893 - loss: 1.3209

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 27s/step - accuracy: 0.2863 - loss: 1.3181 

8/8 ━━━━━━━━━━━━━━━━━━━━ 271s 35s/step - accuracy: 0.2650 - loss: 1.2983 - val_accuracy: 0.3404 - val_loss: 1.2275

Epoch 2/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 2:50 24s/step - accuracy: 0.3125 - loss: 1.2625

2/8 ━━━━━━━━━━━━━━━━━━━━ 47s 8s/step - accuracy: 0.2872 - loss: 1.2709  

3/8 ━━━━━━━━━━━━━━━━━━━━ 1:26 17s/step - accuracy: 0.2996 - loss: 1.2478

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:24 21s/step - accuracy: 0.3096 - loss: 1.2289

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:10 23s/step - accuracy: 0.3172 - loss: 1.2149

6/8 ━━━━━━━━━━━━━━━━━━━━ 53s 27s/step - accuracy: 0.3193 - loss: 1.2051 

7/8 ━━━━━━━━━━━━━━━━━━━━ 28s 28s/step - accuracy: 0.3225 - loss: 1.1974

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 29s/step - accuracy: 0.3243 - loss: 1.1906 

8/8 ━━━━━━━━━━━━━━━━━━━━ 281s 37s/step - accuracy: 0.3376 - loss: 1.1424 - val_accuracy: 0.3191 - val_loss: 1.1437

Epoch 3/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 2:55 25s/step - accuracy: 0.3125 - loss: 1.1454

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:19 23s/step - accuracy: 0.2969 - loss: 1.1501

3/8 ━━━━━━━━━━━━━━━━━━━━ 2:07 26s/step - accuracy: 0.3056 - loss: 1.1434

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:52 28s/step - accuracy: 0.3151 - loss: 1.1384

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:28 30s/step - accuracy: 0.3221 - loss: 1.1346

6/8 ━━━━━━━━━━━━━━━━━━━━ 1:01 31s/step - accuracy: 0.3248 - loss: 1.1320

7/8 ━━━━━━━━━━━━━━━━━━━━ 27s 27s/step - accuracy: 0.3286 - loss: 1.1296 

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 28s/step - accuracy: 0.3292 - loss: 1.1282 

8/8 ━━━━━━━━━━━━━━━━━━━━ 268s 35s/step - accuracy: 0.3333 - loss: 1.1182 - val_accuracy: 0.3404 - val_loss: 1.1097

Epoch 4/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 2:44 24s/step - accuracy: 0.2188 - loss: 1.1614

2/8 ━━━━━━━━━━━━━━━━━━━━ 1:55 19s/step - accuracy: 0.2422 - loss: 1.1478

3/8 ━━━━━━━━━━━━━━━━━━━━ 1:09 14s/step - accuracy: 0.2515 - loss: 1.1428

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:18 20s/step - accuracy: 0.2688 - loss: 1.1361

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:07 23s/step - accuracy: 0.2731 - loss: 1.1342

6/8 ━━━━━━━━━━━━━━━━━━━━ 48s 24s/step - accuracy: 0.2756 - loss: 1.1327 

7/8 ━━━━━━━━━━━━━━━━━━━━ 25s 25s/step - accuracy: 0.2808 - loss: 1.1308

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 26s/step - accuracy: 0.2841 - loss: 1.1292 

8/8 ━━━━━━━━━━━━━━━━━━━━ 254s 33s/step - accuracy: 0.3077 - loss: 1.1181 - val_accuracy: 0.3404 - val_loss: 1.0978

Epoch 5/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 1:03 9s/step - accuracy: 0.2000 - loss: 1.0989

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:18 23s/step - accuracy: 0.2190 - loss: 1.1024

3/8 ━━━━━━━━━━━━━━━━━━━━ 2:03 25s/step - accuracy: 0.2406 - loss: 1.1027

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:49 27s/step - accuracy: 0.2583 - loss: 1.1024

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:28 29s/step - accuracy: 0.2675 - loss: 1.1027

6/8 ━━━━━━━━━━━━━━━━━━━━ 1:00 30s/step - accuracy: 0.2749 - loss: 1.1027

7/8 ━━━━━━━━━━━━━━━━━━━━ 31s 31s/step - accuracy: 0.2816 - loss: 1.1026 

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 31s/step - accuracy: 0.2870 - loss: 1.1025 

8/8 ━━━━━━━━━━━━━━━━━━━━ 277s 38s/step - accuracy: 0.3248 - loss: 1.1015 - val_accuracy: 0.3404 - val_loss: 1.0980

Epoch 6/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 3:06 27s/step - accuracy: 0.4062 - loss: 1.0985

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:28 25s/step - accuracy: 0.3906 - loss: 1.1023

3/8 ━━━━━━━━━━━━━━━━━━━━ 2:10 26s/step - accuracy: 0.3681 - loss: 1.1058

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:52 28s/step - accuracy: 0.3581 - loss: 1.1065

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:29 30s/step - accuracy: 0.3502 - loss: 1.1068

6/8 ━━━━━━━━━━━━━━━━━━━━ 51s 26s/step - accuracy: 0.3458 - loss: 1.1069 

7/8 ━━━━━━━━━━━━━━━━━━━━ 27s 27s/step - accuracy: 0.3423 - loss: 1.1071

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 28s/step - accuracy: 0.3401 - loss: 1.1071 

8/8 ━━━━━━━━━━━━━━━━━━━━ 271s 35s/step - accuracy: 0.3248 - loss: 1.1074 - val_accuracy: 0.3404 - val_loss: 1.0995

Epoch 7/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 2:24 21s/step - accuracy: 0.3438 - loss: 1.1066

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:52 29s/step - accuracy: 0.3359 - loss: 1.1025

3/8 ━━━━━━━━━━━━━━━━━━━━ 2:27 29s/step - accuracy: 0.3420 - loss: 1.1011

4/8 ━━━━━━━━━━━━━━━━━━━━ 2:01 30s/step - accuracy: 0.3464 - loss: 1.0999

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:33 31s/step - accuracy: 0.3433 - loss: 1.1017

6/8 ━━━━━━━━━━━━━━━━━━━━ 1:03 32s/step - accuracy: 0.3399 - loss: 1.1037

7/8 ━━━━━━━━━━━━━━━━━━━━ 27s 28s/step - accuracy: 0.3373 - loss: 1.1051 

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 29s/step - accuracy: 0.3368 - loss: 1.1058 

8/8 ━━━━━━━━━━━━━━━━━━━━ 271s 36s/step - accuracy: 0.3333 - loss: 1.1109 - val_accuracy: 0.3404 - val_loss: 1.1016

Epoch 8/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 2:40 23s/step - accuracy: 0.3438 - loss: 1.1062

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:37 26s/step - accuracy: 0.3281 - loss: 1.1113

3/8 ━━━━━━━━━━━━━━━━━━━━ 2:16 27s/step - accuracy: 0.3229 - loss: 1.1146

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:54 29s/step - accuracy: 0.3203 - loss: 1.1153

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:11 24s/step - accuracy: 0.3186 - loss: 1.1157

6/8 ━━━━━━━━━━━━━━━━━━━━ 50s 25s/step - accuracy: 0.3135 - loss: 1.1155 

7/8 ━━━━━━━━━━━━━━━━━━━━ 26s 26s/step - accuracy: 0.3105 - loss: 1.1150

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 27s/step - accuracy: 0.3080 - loss: 1.1145 

8/8 ━━━━━━━━━━━━━━━━━━━━ 256s 33s/step - accuracy: 0.2906 - loss: 1.1111 - val_accuracy: 0.3191 - val_loss: 1.0994

Epoch 9/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 2:33 22s/step - accuracy: 0.4062 - loss: 1.0960

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:49 28s/step - accuracy: 0.3984 - loss: 1.0957

3/8 ━━━━━━━━━━━━━━━━━━━━ 2:29 30s/step - accuracy: 0.3906 - loss: 1.0957

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:32 23s/step - accuracy: 0.3849 - loss: 1.0960

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:18 26s/step - accuracy: 0.3804 - loss: 1.0958

6/8 ━━━━━━━━━━━━━━━━━━━━ 56s 28s/step - accuracy: 0.3729 - loss: 1.0968 

7/8 ━━━━━━━━━━━━━━━━━━━━ 28s 29s/step - accuracy: 0.3684 - loss: 1.0974

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 29s/step - accuracy: 0.3678 - loss: 1.0974 

8/8 ━━━━━━━━━━━━━━━━━━━━ 274s 36s/step - accuracy: 0.3632 - loss: 1.0974 - val_accuracy: 0.3404 - val_loss: 1.0973

Epoch 10/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 3:09 27s/step - accuracy: 0.1875 - loss: 1.1308

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:42 27s/step - accuracy: 0.1953 - loss: 1.1227

3/8 ━━━━━━━━━━━━━━━━━━━━ 1:26 17s/step - accuracy: 0.1978 - loss: 1.1206

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:24 21s/step - accuracy: 0.2073 - loss: 1.1188

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:10 24s/step - accuracy: 0.2166 - loss: 1.1172

6/8 ━━━━━━━━━━━━━━━━━━━━ 49s 25s/step - accuracy: 0.2236 - loss: 1.1163 

7/8 ━━━━━━━━━━━━━━━━━━━━ 25s 25s/step - accuracy: 0.2313 - loss: 1.1153

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 29s/step - accuracy: 0.2371 - loss: 1.1148 

8/8 ━━━━━━━━━━━━━━━━━━━━ 273s 35s/step - accuracy: 0.2778 - loss: 1.1113 - val_accuracy: 0.3404 - val_loss: 1.1021

MobileNetV2

Code
mobile = MobileNetV2(
include_top=False,
input_shape=IMG_SIZE+(3,),
weights="imagenet"
)
mobile.trainable = False

model_m = models.Sequential([
mobile,
layers.GlobalAveragePooling2D(),
layers.Dense(256, activation="relu"),
layers.Dense(num_classes, activation="softmax")
])

model_m.compile(
optimizer="adam",
loss="categorical_crossentropy",
metrics=["accuracy"]
)

history_m = model_m.fit(train_ds, validation_data=val_ds, epochs=10)
Epoch 1/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 3:17 28s/step - accuracy: 0.4375 - loss: 1.4068

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:33 26s/step - accuracy: 0.4219 - loss: 1.6647

3/8 ━━━━━━━━━━━━━━━━━━━━ 1:22 17s/step - accuracy: 0.4209 - loss: 1.7334

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:28 22s/step - accuracy: 0.4265 - loss: 1.7045

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:10 23s/step - accuracy: 0.4253 - loss: 1.6792

6/8 ━━━━━━━━━━━━━━━━━━━━ 49s 25s/step - accuracy: 0.4230 - loss: 1.6620 

7/8 ━━━━━━━━━━━━━━━━━━━━ 25s 26s/step - accuracy: 0.4241 - loss: 1.6382

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 27s/step - accuracy: 0.4288 - loss: 1.6095 

8/8 ━━━━━━━━━━━━━━━━━━━━ 280s 36s/step - accuracy: 0.4615 - loss: 1.4080 - val_accuracy: 0.3404 - val_loss: 1.4265

Epoch 2/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 2:24 21s/step - accuracy: 0.6562 - loss: 1.0252

2/8 ━━━━━━━━━━━━━━━━━━━━ 2:30 25s/step - accuracy: 0.6406 - loss: 1.0522

3/8 ━━━━━━━━━━━━━━━━━━━━ 1:51 22s/step - accuracy: 0.6424 - loss: 1.0179

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:35 24s/step - accuracy: 0.6380 - loss: 0.9931

5/8 ━━━━━━━━━━━━━━━━━━━━ 1:17 26s/step - accuracy: 0.6354 - loss: 0.9732

6/8 ━━━━━━━━━━━━━━━━━━━━ 55s 28s/step - accuracy: 0.6337 - loss: 0.9578 

7/8 ━━━━━━━━━━━━━━━━━━━━ 25s 25s/step - accuracy: 0.6323 - loss: 0.9457

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 26s/step - accuracy: 0.6307 - loss: 0.9372 

8/8 ━━━━━━━━━━━━━━━━━━━━ 257s 34s/step - accuracy: 0.6197 - loss: 0.8772 - val_accuracy: 0.3830 - val_loss: 1.5583

Epoch 3/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 36s 5s/step - accuracy: 0.6000 - loss: 0.7132

2/8 ━━━━━━━━━━━━━━━━━━━━ 1:35 16s/step - accuracy: 0.6095 - loss: 0.7635

3/8 ━━━━━━━━━━━━━━━━━━━━ 1:16 15s/step - accuracy: 0.6361 - loss: 0.7389

4/8 ━━━━━━━━━━━━━━━━━━━━ 58s 15s/step - accuracy: 0.6492 - loss: 0.7205 

5/8 ━━━━━━━━━━━━━━━━━━━━ 44s 15s/step - accuracy: 0.6571 - loss: 0.7098

6/8 ━━━━━━━━━━━━━━━━━━━━ 31s 16s/step - accuracy: 0.6662 - loss: 0.6971

7/8 ━━━━━━━━━━━━━━━━━━━━ 17s 18s/step - accuracy: 0.6736 - loss: 0.6893

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 20s/step - accuracy: 0.6818 - loss: 0.6807 

8/8 ━━━━━━━━━━━━━━━━━━━━ 196s 27s/step - accuracy: 0.7393 - loss: 0.6208 - val_accuracy: 0.4468 - val_loss: 1.1707

Epoch 4/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 1:42 15s/step - accuracy: 0.6562 - loss: 0.7400

2/8 ━━━━━━━━━━━━━━━━━━━━ 1:41 17s/step - accuracy: 0.7031 - loss: 0.6742

3/8 ━━━━━━━━━━━━━━━━━━━━ 1:23 17s/step - accuracy: 0.7396 - loss: 0.6256

4/8 ━━━━━━━━━━━━━━━━━━━━ 1:07 17s/step - accuracy: 0.7598 - loss: 0.5941

5/8 ━━━━━━━━━━━━━━━━━━━━ 51s 17s/step - accuracy: 0.7741 - loss: 0.5708 

6/8 ━━━━━━━━━━━━━━━━━━━━ 29s 15s/step - accuracy: 0.7843 - loss: 0.5548

7/8 ━━━━━━━━━━━━━━━━━━━━ 16s 17s/step - accuracy: 0.7903 - loss: 0.5421

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 19s/step - accuracy: 0.7941 - loss: 0.5333 

8/8 ━━━━━━━━━━━━━━━━━━━━ 182s 24s/step - accuracy: 0.8205 - loss: 0.4718 - val_accuracy: 0.5319 - val_loss: 1.1964

Epoch 5/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 16s 2s/step - accuracy: 0.9000 - loss: 0.3371

2/8 ━━━━━━━━━━━━━━━━━━━━ 42s 7s/step - accuracy: 0.8905 - loss: 0.3193

3/8 ━━━━━━━━━━━━━━━━━━━━ 34s 7s/step - accuracy: 0.8864 - loss: 0.3230

4/8 ━━━━━━━━━━━━━━━━━━━━ 26s 7s/step - accuracy: 0.8771 - loss: 0.3357

5/8 ━━━━━━━━━━━━━━━━━━━━ 18s 6s/step - accuracy: 0.8698 - loss: 0.3450

6/8 ━━━━━━━━━━━━━━━━━━━━ 12s 6s/step - accuracy: 0.8680 - loss: 0.3478

7/8 ━━━━━━━━━━━━━━━━━━━━ 6s 6s/step - accuracy: 0.8684 - loss: 0.3482 

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 6s/step - accuracy: 0.8699 - loss: 0.3480

8/8 ━━━━━━━━━━━━━━━━━━━━ 54s 7s/step - accuracy: 0.8803 - loss: 0.3462 - val_accuracy: 0.5319 - val_loss: 1.2712

Epoch 6/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 38s 6s/step - accuracy: 0.8125 - loss: 0.2868

2/8 ━━━━━━━━━━━━━━━━━━━━ 32s 5s/step - accuracy: 0.8281 - loss: 0.2964

3/8 ━━━━━━━━━━━━━━━━━━━━ 26s 5s/step - accuracy: 0.8403 - loss: 0.3016

4/8 ━━━━━━━━━━━━━━━━━━━━ 21s 5s/step - accuracy: 0.8490 - loss: 0.3022

5/8 ━━━━━━━━━━━━━━━━━━━━ 15s 5s/step - accuracy: 0.8592 - loss: 0.2986

6/8 ━━━━━━━━━━━━━━━━━━━━ 9s 5s/step - accuracy: 0.8670 - loss: 0.2951 

7/8 ━━━━━━━━━━━━━━━━━━━━ 4s 5s/step - accuracy: 0.8732 - loss: 0.2917

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 5s/step - accuracy: 0.8752 - loss: 0.2919

8/8 ━━━━━━━━━━━━━━━━━━━━ 47s 6s/step - accuracy: 0.8889 - loss: 0.2934 - val_accuracy: 0.4894 - val_loss: 1.3123

Epoch 7/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 13s 2s/step - accuracy: 1.0000 - loss: 0.3288

2/8 ━━━━━━━━━━━━━━━━━━━━ 35s 6s/step - accuracy: 1.0000 - loss: 0.2771

3/8 ━━━━━━━━━━━━━━━━━━━━ 30s 6s/step - accuracy: 0.9910 - loss: 0.2635

4/8 ━━━━━━━━━━━━━━━━━━━━ 22s 6s/step - accuracy: 0.9885 - loss: 0.2511

5/8 ━━━━━━━━━━━━━━━━━━━━ 17s 6s/step - accuracy: 0.9865 - loss: 0.2414

6/8 ━━━━━━━━━━━━━━━━━━━━ 11s 6s/step - accuracy: 0.9838 - loss: 0.2345

7/8 ━━━━━━━━━━━━━━━━━━━━ 5s 6s/step - accuracy: 0.9826 - loss: 0.2286 

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 6s/step - accuracy: 0.9821 - loss: 0.2245

8/8 ━━━━━━━━━━━━━━━━━━━━ 50s 7s/step - accuracy: 0.9786 - loss: 0.1963 - val_accuracy: 0.5319 - val_loss: 1.2927

Epoch 8/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 39s 6s/step - accuracy: 1.0000 - loss: 0.1200

2/8 ━━━━━━━━━━━━━━━━━━━━ 10s 2s/step - accuracy: 0.9881 - loss: 0.1315

3/8 ━━━━━━━━━━━━━━━━━━━━ 19s 4s/step - accuracy: 0.9876 - loss: 0.1373

4/8 ━━━━━━━━━━━━━━━━━━━━ 17s 4s/step - accuracy: 0.9883 - loss: 0.1390

5/8 ━━━━━━━━━━━━━━━━━━━━ 13s 5s/step - accuracy: 0.9892 - loss: 0.1390

6/8 ━━━━━━━━━━━━━━━━━━━━ 9s 5s/step - accuracy: 0.9890 - loss: 0.1390 

7/8 ━━━━━━━━━━━━━━━━━━━━ 4s 5s/step - accuracy: 0.9885 - loss: 0.1393

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 5s/step - accuracy: 0.9883 - loss: 0.1397

8/8 ━━━━━━━━━━━━━━━━━━━━ 47s 6s/step - accuracy: 0.9872 - loss: 0.1424 - val_accuracy: 0.4468 - val_loss: 1.4388

Epoch 9/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 40s 6s/step - accuracy: 1.0000 - loss: 0.1224

2/8 ━━━━━━━━━━━━━━━━━━━━ 34s 6s/step - accuracy: 1.0000 - loss: 0.1198

3/8 ━━━━━━━━━━━━━━━━━━━━ 27s 5s/step - accuracy: 1.0000 - loss: 0.1162

4/8 ━━━━━━━━━━━━━━━━━━━━ 21s 5s/step - accuracy: 1.0000 - loss: 0.1150

5/8 ━━━━━━━━━━━━━━━━━━━━ 16s 5s/step - accuracy: 1.0000 - loss: 0.1140

6/8 ━━━━━━━━━━━━━━━━━━━━ 10s 5s/step - accuracy: 1.0000 - loss: 0.1148

7/8 ━━━━━━━━━━━━━━━━━━━━ 4s 5s/step - accuracy: 1.0000 - loss: 0.1153 

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 5s/step - accuracy: 0.9995 - loss: 0.1158

8/8 ━━━━━━━━━━━━━━━━━━━━ 48s 6s/step - accuracy: 0.9957 - loss: 0.1189 - val_accuracy: 0.4894 - val_loss: 1.4906

Epoch 10/10


1/8 ━━━━━━━━━━━━━━━━━━━━ 41s 6s/step - accuracy: 0.9375 - loss: 0.1466

2/8 ━━━━━━━━━━━━━━━━━━━━ 31s 5s/step - accuracy: 0.9531 - loss: 0.1348

3/8 ━━━━━━━━━━━━━━━━━━━━ 16s 3s/step - accuracy: 0.9597 - loss: 0.1295

4/8 ━━━━━━━━━━━━━━━━━━━━ 16s 4s/step - accuracy: 0.9651 - loss: 0.1227

5/8 ━━━━━━━━━━━━━━━━━━━━ 14s 5s/step - accuracy: 0.9692 - loss: 0.1186

6/8 ━━━━━━━━━━━━━━━━━━━━ 10s 5s/step - accuracy: 0.9723 - loss: 0.1155

7/8 ━━━━━━━━━━━━━━━━━━━━ 5s 5s/step - accuracy: 0.9749 - loss: 0.1144 

8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 5s/step - accuracy: 0.9770 - loss: 0.1132

8/8 ━━━━━━━━━━━━━━━━━━━━ 51s 6s/step - accuracy: 0.9915 - loss: 0.1046 - val_accuracy: 0.5319 - val_loss: 1.4383

Gráficas de Entrenamiento

Code
plt.plot(history_e.history['accuracy'], label="EfficientNet Acc")
plt.plot(history_m.history['accuracy'], label="MobileNet Acc")
plt.legend(); plt.title("Comparación Accuracy"); plt.show()

Predicción desde imagenes celular

Code
from tensorflow.keras.preprocessing import image
import numpy as np
import matplotlib.pyplot as plt

def predict(img_path, model):
    img = image.load_img(img_path, target_size=IMG_SIZE)
    img_array = image.img_to_array(img) / 255.0
    img_array = np.expand_dims(img_array, 0)
    
    pred = model.predict(img_array)[0]

    classes = list(train_ds.class_indices.keys())
    result = classes[np.argmax(pred)]

    # 🔹 Mostrar la imagen y la predicción
    plt.imshow(image.load_img(img_path))
    plt.title(f"Predicción: {result}")
    plt.axis("off")
    plt.show()

    return result, pred


img_path = r"G:\Mi unidad\Colab Notebooks\AProfundo\clasificacion_dataset\test\monilia\Monilia101.jpg"
print(predict(img_path, model_m))
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 2s/step

1/1 ━━━━━━━━━━━━━━━━━━━━ 2s 2s/step

('monilia', array([1.5889719e-01, 8.4103799e-01, 6.4803462e-05], dtype=float32))